Django Channels 是 Django 的一個延伸套件,它使開發人員能夠輕鬆構建即時應用程式。在這篇指南中,將解釋如何下載 Channels 並設定 Django 使其運行順暢。
poetry add channels["daphne"]
daphne 是 Channels 預設的 ASGI server,可以自行更換成其他。(例如 Uvicorn, Hypercorn)。
詳細可以參閱說明:https://channels.readthedocs.io/en/latest/
首先在 Installed_apps 加上 daphne
,謹記一定要在 django.contrib.staticfiles
前。或是像是官方建議一樣,直接放在最前面就好。
INSTALLED_APPS = [
# 👇 加在這裡
"daphne",
'django.contrib.admin',
# ....
# ...
# ..
# .
'myapp',
]
ASGI_APPLICATION = 'myproject.asgi.application'
#WSGI_APPLICATION = 'myproject.wsgi.application'
CHANNEL_LAYERS = {
'default': {
'BACKEND': "channels.layers.InMemoryChannelLayer"
}
}
當你在 CHANNEL_LAYERS 設置中定義 'BACKEND': "channels.layers.InMemoryChannelLayer" 並放在 'default' 下時,表示你使用的是 Django Channels 提供的內存通道層,這通常用於開發環境。
在正式環境中,通常會使用更可靠的通道層後端,比如 Redis 或 RabbitMQ。這些工具能夠更好地處理大量的並發連接與消息傳遞。
這些設置更改是為了將 Django Channels 融合到 Django 中,從而通過 WebSocket 連接實現即時通訊的功能。
很嚴格來說, Channels 並不是一個 Django 應用,而是一個拿來製造 Django 應用的框架。這也是為什麼我們不用在 Installed_app 中放入 Channels。但在後續的設定中,許多檔案都會引用 Channels 提供的函式與型別。
而 Daphne 作為 ASGI server 並不綁定於 Channels,只要想要實現非同步交流的 Python project 都可以使用它。
很嚴格來說,Channels 是不需要 Channel Layers 也可以用得,只不過功能會侷限很多。因為 Channel Layers 著重在實現不同服務之間通信的機制,假如只需要伺服器與一個客戶端的連結,的確用不到。不過這種狀況比較少見,因為用上了 Websocket 通訊機制時,多數強調不同消費者 (consumer) 之間的互動。
Channel Layers 有以下幾個好處:
消息傳遞 (Message Passing)
Channel Layer 允許不同的消費者(consumers)之間傳遞消息。這對於像聊天室、即時通知這類需要多個用戶即時互動的應用非常有用。當一個用戶發送消息時,它可以通過 Channel Layer 傳遞給其他消費者。
群組管理 (Group Management)
Channel Layer 可將多個消費者組成一個群組,並將消息廣播到整個群組。這對於通知所有用戶或一組特定用戶非常有幫助,例如向聊天室中的所有用戶發送消息,或給訂閱某個頻道的用戶發送通知。
支援多節點 (Multi-node Support)
Channel Layer 還可以跨多個服務器實例工作,這意味著它支持分佈式應用程式的通訊。因此,無論應用程式運行在單個還是多個節點上,Channel Layer 都能夠有效管理和傳遞消息。